package com.liyy.leetcode.editor.cn;

//题目编号:209
//题目标题:长度最小的子数组	
//题目标记:minimum-size-subarray-sum	

//题目描述:
//给定一个含有 n 个正整数的数组和一个正整数 s ，找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组，并返回其长度。如果不存在符合条件的子数组，返回
// 0。 
//
// 
//
// 示例： 
//
// 输入：s = 7, nums = [2,3,1,2,4,3]
//输出：2
//解释：子数组 [4,3] 是该条件下的长度最小的子数组。
// 
//
// 
//
// 进阶： 
//
// 
// 如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。 
// 
// Related Topics 数组 双指针 二分查找
	
public class MinimumSizeSubarraySum {
  
    public static void main(String[] args) {
       Solution solution = new MinimumSizeSubarraySum().new Solution();
    }
  
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int cns = Integer.MAX_VALUE;

        int start = 0;
        int end = 0;
        int sum = 0;
        while (end < nums.length){
            sum += nums[end];
            while (sum >= s) {
                cns = Math.min(cns,end - start + 1);
                sum-=nums[start];
                start++;
            }
            end++;
        }

        return cns == Integer.MAX_VALUE ? 0 : cns;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}